안드로이드 OpenGL을 이용해서 텍스쳐 만들기 :: OPEN GL ES[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

OPEN GL ES
[1]
등록일:2018-07-14 16:59:22 (0%)
작성자:
제목:안드로이드 OpenGL을 이용해서 텍스쳐 만들기
처음 설정은 어떻게 해야 하는건지 어느정도 아실거라고 생각하겠습니다.


렌더러 설정은 생략하겠습니다.
서피스뷰 설정도 생략하겠습니다.



먼저 정점, 텍스쳐 좌표, 인덱스 등을 선언해줍시다
음수로 해놓은건 그냥 보기 쉽게 해놓으려고 일부러 저렇게 해놓은겁니다.
정점 값들은 모두 입혀질 이미지의 사이즈를 얻어와서 입력할 겁니다.



이렇게 적절한 변수들도 몇 개 만들어 주도록 하자구요.

이제 함수를 코딩해봅시다.
함수는 크게 3가지로 나눠보겠습니다. ( 그런데 잡다한거 3개 껴서 총 6개 인듯)

리소스를 비트맵으로 만들어서 캔버스에 그리는
void drawImage( int id ) 함수

버텍스 좌표와 좌표 배열을 저장하는
void loadVertex() 함수

그리고 마지막으로 OpenGL 텍스쳐를 입히는
drawTexture() 함수

꽤 많이 쪼갠 기분이 드는건 착각입니다.
설명 들어갑니다.



drawImage 함수의 전체적인 모습입니다.
resource = BitmapFactory.decodeResource( resource, id ); 로 비트맵을 불러옵니다.
서핑하다 보면 비트맵 파일을 원시데이터로 불러와야 한다고들 하던데 그냥 비트맵으로 만들어도
문제 없는 것 같습니다.

texWidth 와 texHeight 에 resource 의 사이즈를 저장합니다.
resource 는 나중에 반환할거라 사이즈를 저장해줘야 합니다.



그 다음 부분인 이 부분은
리소스 사이즈에서 가장 가까운 2의 제곱수를 찾는 코드입니다.
OpenGL 은 텍스쳐 사이즈를 2의 제곱수 밖에 사용하지 못하기 때문입니다.

여기서 bufWidth & bufHeight 값의 초기화는 2로 해줘야합니다.



마지막으로 구한 사이즈 값으로 백버퍼를 생성해주고 캔버스에 넘겨줍니다.
캔버스 생성자에게 비트맵을 넘겨주게 되면 그림이 비트맵에 그려지게 됩니다.



실제로는 큰 이미지에 작은 이미지가 그려진 것이기 때문에
백버퍼를 보여지게 하면 이런 꼴입니다.



(아래 함수는 밑에서 보여드리겠습니다.)
드디어 버텍스 좌표를 설정하는 부분입니다.

버텍스 좌표를 설정하는 부분에서 중심점이 정해집니다.
이 중심점은 glTranslate~ 함수에 영향을 줍니다.



지금 그려진 이미지를 설명하는 그림입니다.


그리고 이것이 설정해야하는 중심점의 위치입니다.

중심점을 가운데로 해버리면 좌표를
좌표 + 2 ÷ ( 백버퍼 사이즈 - 이미지 사이즈 ) 
이런 식으로 계산해줘야 하기 대문에 다양한 면에서 불이익을 받습니다. ( 특히 회전 시킬 때 )

중심점은 버텍스 좌표에 따라서 정해집니다. 다들 알고 계시죠 ?
에이 왜그래요 처음 듣는 다는 그 표정

그런고로 버텍스 좌표는 중심점으로 부터 떨어진 이미지의 길이로 설정해주심 됩니다.






좌표 배열을 저장해주는 함수입니다.
따로 안묶어도 되지만 묶는게 깔끔합니다.



마지막으로 OpenGL 텍스쳐를 생성합니다.
마지막으로 비트맵을 반환해주는 것도 잊지 맙시다.

함수의 구현이 끝났습니다.
함수는 drawImage -> loadVertex -> drawTexture 순서로 실행해주자구요.



그리는 함수는 서비스 ㅋㅋ

[본문링크] 안드로이드 OpenGL을 이용해서 텍스쳐 만들기
[1]
코멘트(이글의 트랙백 주소:/cafe/tb_receive.php?no=34686
작성자
비밀번호

 

SSISOCommunity

[이전]

Copyright byCopyright ⓒ2005, SSISO Community All Rights Reserved.